<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Profiling (computer programming)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Profiling_(computer_programming)"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Profiling_computer_programming rootpage-Profiling_computer_programming skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Profiling (computer programming)</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1305433154">
/* start https://en.wikipedia.org/ */
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style>
<style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1246091330">
/* start https://en.wikipedia.org/ */
.mw-parser-output .sidebar{width:22em;float:right;clear:right;margin:0.5em 0 1em 1em;background:var(--background-color-neutral-subtle,#f8f9fa);border:1px solid var(--border-color-base,#a2a9b1);padding:0.2em;text-align:center;line-height:1.4em;font-size:88%;border-collapse:collapse;display:table}body.skin-minerva .mw-parser-output .sidebar{display:table!important;float:right!important;margin:0.5em 0 1em 1em!important}.mw-parser-output .sidebar-subgroup{width:100%;margin:0;border-spacing:0}.mw-parser-output .sidebar-left{float:left;clear:left;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-none{float:none;clear:both;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-outer-title{padding:0 0.4em 0.2em;font-size:125%;line-height:1.2em;font-weight:bold}.mw-parser-output .sidebar-top-image{padding:0.4em}.mw-parser-output .sidebar-top-caption,.mw-parser-output .sidebar-pretitle-with-top-image,.mw-parser-output .sidebar-caption{padding:0.2em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-pretitle{padding:0.4em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-title,.mw-parser-output .sidebar-title-with-pretitle{padding:0.2em 0.8em;font-size:145%;line-height:1.2em}.mw-parser-output .sidebar-title-with-pretitle{padding:0.1em 0.4em}.mw-parser-output .sidebar-image{padding:0.2em 0.4em 0.4em}.mw-parser-output .sidebar-heading{padding:0.1em 0.4em}.mw-parser-output .sidebar-content{padding:0 0.5em 0.4em}.mw-parser-output .sidebar-content-with-subgroup{padding:0.1em 0.4em 0.2em}.mw-parser-output .sidebar-above,.mw-parser-output .sidebar-below{padding:0.3em 0.8em;font-weight:bold}.mw-parser-output .sidebar-collapse .sidebar-above,.mw-parser-output .sidebar-collapse .sidebar-below{border-top:1px solid #aaa;border-bottom:1px solid #aaa}.mw-parser-output .sidebar-navbar{text-align:right;font-size:115%;padding:0 0.4em 0.4em}.mw-parser-output .sidebar-list-title{padding:0 0.4em;text-align:left;font-weight:bold;line-height:1.6em;font-size:105%}.mw-parser-output .sidebar-list-title-c{padding:0 0.4em;text-align:center;margin:0 3.3em}@media(max-width:640px){body.mediawiki .mw-parser-output .sidebar{width:100%!important;clear:both;float:none!important;margin-left:0!important;margin-right:0!important}}body.skin--responsive .mw-parser-output .sidebar a>img{max-width:none!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle a{color:var(--color-progressive)!important}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle a{color:var(--color-progressive)!important}}@media print{body.ns-0 .mw-parser-output .sidebar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><table class="sidebar sidebar-collapse nomobile"><tbody><tr><td class="sidebar-pretitle">Part of a series on</td></tr><tr><th class="sidebar-title-with-pretitle"><a href="Software_development" title="Software development">Software development</a></th></tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Core activities</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Data_modeling" title="Data modeling">Data modeling</a></li>
<li><a href="Software_development_process" title="Software development process">Processes</a></li>
<li><a href="Requirements_analysis" title="Requirements analysis">Requirements</a></li>
<li><a href="Software_design" title="Software design">Design</a></li>
<li><a href="Software_construction" title="Software construction">Construction</a></li>
<li><a href="Software_engineering" title="Software engineering">Engineering</a></li>
<li><a href="Software_testing" title="Software testing">Testing</a></li>
<li><a href="Debugging" title="Debugging">Debugging</a></li>
<li><a href="Software_deployment" title="Software deployment">Deployment</a></li>
<li><a href="Software_maintenance" title="Software maintenance">Maintenance</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Paradigms and models</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Agile_software_development" title="Agile software development">Agile</a></li>
<li><a href="Cleanroom_software_engineering" title="Cleanroom software engineering">Cleanroom</a></li>
<li><a href="Incremental_build_model" title="Incremental build model">Incremental</a></li>
<li><a href="Software_prototyping" title="Software prototyping">Prototyping</a></li>
<li><a href="Spiral_model" title="Spiral model">Spiral</a></li>
<li><a href="V-model_(software_development)" title="V-model (software development)">V model</a></li>
<li><a href="Waterfall_model" title="Waterfall model">Waterfall</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)"><a href="Software_development_methodology" class="mw-redirect" title="Software development methodology">Methodologies</a> and frameworks</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Adaptive_software_development" title="Adaptive software development">ASD</a></li>
<li><a href="Disciplined_agile_delivery" title="Disciplined agile delivery">DAD</a></li>
<li><a href="DevOps" title="DevOps">DevOps</a></li>
<li><a href="Dynamic_systems_development_method" title="Dynamic systems development method">DSDM</a></li>
<li><a href="Feature-driven_development" title="Feature-driven development">FDD</a></li>
<li><a href="Iterative_and_incremental_development" title="Iterative and incremental development">IID</a></li>
<li><a href="Kanban_(development)" title="Kanban (development)">Kanban</a></li>
<li><a href="Lean_software_development" title="Lean software development">Lean SD</a></li>
<li><a href="Scrum_(software_development)#Large-scale_Scrum" title="Scrum (software development)">LeSS</a></li>
<li><a href="Model-driven_development" class="mw-redirect" title="Model-driven development">MDD</a></li>
<li><a href="Microsoft_Solutions_Framework" title="Microsoft Solutions Framework">MSF</a></li>
<li><a href="Personal_software_process" title="Personal software process">PSP</a></li>
<li><a href="Rapid_application_development" title="Rapid application development">RAD</a></li>
<li><a href="Rational_unified_process" title="Rational unified process">RUP</a></li>
<li><a href="Scaled_agile_framework" title="Scaled agile framework">SAFe</a></li>
<li><a href="Scrum_(software_development)" title="Scrum (software development)">Scrum</a></li>
<li><a href="SEMAT" title="SEMAT">SEMAT</a></li>
<li><a href="Test-driven_development" title="Test-driven development">TDD</a></li>
<li><a href="Team_software_process" title="Team software process">TSP</a></li>
<li><a href="Unified_process" title="Unified process">UP</a></li>
<li><a href="Extreme_programming" title="Extreme programming">XP</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Supporting disciplines</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Software_configuration_management" title="Software configuration management">Configuration management</a></li>
<li><a href="Deployment_management#Computer_science" title="Deployment management">Deployment management</a></li>
<li><a href="Software_documentation" title="Software documentation">Documentation</a></li>
<li><a href="Software_project_management" title="Software project management">Project management</a></li>
<li><a href="Software_quality_assurance" title="Software quality assurance">Quality assurance</a></li>
<li><a href="User_experience" title="User experience">User experience</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Practices</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Acceptance_test-driven_development" title="Acceptance test-driven development">ATDD</a></li>
<li><a href="Behavior-driven_development" title="Behavior-driven development">BDD</a></li>
<li><a href="Extreme_programming_practices#Collective_code_ownership" title="Extreme programming practices">CCO</a></li>
<li><a href="Continuous_delivery" title="Continuous delivery">CD</a></li>
<li><a href="Continuous_integration" title="Continuous integration">CI</a></li>
<li><a href="Domain-driven_design" title="Domain-driven design">DDD</a></li>
<li><a href="Pair_programming" title="Pair programming">PP</a></li>
<li><a href="Specification_by_example" title="Specification by example">SBE</a></li>
<li><a href="Stand-up_meeting" title="Stand-up meeting">Stand-up</a></li>
<li><a href="Test-driven_development" title="Test-driven development">TDD</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible"><div class="sidebar-list-title" style="color: var(--color-base)"><a href="Programming_tool" title="Programming tool">Tools</a></div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Build_automation" title="Build automation">Build automation</a></li>
<li><a href="Compiler" title="Compiler">Compiler</a></li>
<li><a href="Debugger" title="Debugger">Debugger</a></li>
<li><a href="Graphical_user_interface_builder" title="Graphical user interface builder">GUI builder</a></li>
<li><a href="Integrated_development_environment" title="Integrated development environment">IDE</a></li>
<li><a href="Infrastructure_as_code" title="Infrastructure as code">Infrastructure as code</a></li>
<li><a href="Application-release_automation" title="Application-release automation">Release automation</a></li>
<li><a href="UML_tool" title="UML tool">UML Modeling</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Standards and bodies of knowledge</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Capability_Maturity_Model_Integration" title="Capability Maturity Model Integration">CMMI</a></li>
<li><a href="IEEE_Standards_Association" title="IEEE Standards Association">IEEE standards</a></li>
<li><a href="International_Requirements_Engineering_Board" title="International Requirements Engineering Board">IREB</a></li>
<li><a href="ISO_9001" class="mw-redirect" title="ISO 9001">ISO 9001</a></li>
<li><a href="ISO/IEC_JTC_1/SC_7" title="ISO/IEC JTC 1/SC 7">ISO/IEC standards</a></li>
<li><a href="ITIL" title="ITIL">ITIL</a></li>
<li><a href="Object_Management_Group" title="Object Management Group">OMG</a></li>
<li><a href="Project_Management_Body_of_Knowledge" title="Project Management Body of Knowledge">PMBOK</a></li>
<li><a href="Software_Engineering_Body_of_Knowledge" title="Software Engineering Body of Knowledge">SWEBOK</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Glossaries</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Glossary_of_artificial_intelligence" title="Glossary of artificial intelligence">Artificial intelligence</a></li>
<li><a href="Glossary_of_computer_science" title="Glossary of computer science">Computer science</a></li>
<li><a href="Glossary_of_electrical_and_electronics_engineering" title="Glossary of electrical and electronics engineering">Electrical and electronics engineering</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Outlines</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Outline_of_software_development" title="Outline of software development">Outline of software development</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-navbar"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></td></tr></tbody></table>
<p>In <a href="Software_engineering" title="Software engineering">software engineering</a>, <b>profiling</b> (<b>program profiling</b>, <b>software profiling</b>) is a form of <a href="Dynamic_program_analysis" title="Dynamic program analysis">dynamic program analysis</a> that measures, for example, the space (memory) or time <a href="Computational_complexity_theory" title="Computational complexity theory">complexity of a program</a>, the <a href="Instruction_set_simulator" title="Instruction set simulator">usage of particular instructions</a>, or the frequency and duration of function calls. Most commonly, profiling information serves to aid <a href="Program_optimization" title="Program optimization">program optimization</a>, and more specifically, <a href="Performance_engineering" title="Performance engineering">performance engineering</a>.
</p><p>Profiling is achieved by <a href="Instrumentation_(computer_programming)" title="Instrumentation (computer programming)">instrumenting</a> either the program <a href="Source_code" title="Source code">source code</a> or its binary executable form using a tool called a <i>profiler</i> (or <i>code profiler</i>). Profilers may use a number of different techniques, such as event-based, statistical, instrumented, and simulation methods.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Gathering_program_events">Gathering program events</h2></div>
<p>Profilers use a wide variety of techniques to collect data, including <a href="Hardware_interrupt" class="mw-redirect" title="Hardware interrupt">hardware interrupts</a>, <a href="Instrumentation_(computer_programming)" title="Instrumentation (computer programming)">code instrumentation</a>, <a href="Instruction_set_simulator" title="Instruction set simulator">instruction set simulation</a>, operating system <a href="Hooking" title="Hooking">hooks</a>, and <a href="Hardware_performance_counter" title="Hardware performance counter">performance counters</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Use_of_profilers">Use of profilers</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1244412712">
/* start https://en.wikipedia.org/ */
.mw-parser-output .templatequote{overflow:hidden;margin:1em 0;padding:0 32px}.mw-parser-output .templatequotecite{line-height:1.5em;text-align:left;margin-top:0}@media(min-width:500px){.mw-parser-output .templatequotecite{padding-left:1.6em}}
/* end https://en.wikipedia.org/ */
</style><blockquote class="templatequote"><p>Program analysis tools are extremely important for understanding program behavior. Computer architects need such tools to evaluate how well programs will perform on new <a href="Computer_architecture" title="Computer architecture">architectures</a>. Software writers need tools to analyze their programs and identify critical sections of code. <a href="Compiler" title="Compiler">Compiler</a> writers often use such tools to find out how well their <a href="Instruction_scheduling" title="Instruction scheduling">instruction scheduling</a> or <a href="Branch_prediction" class="mw-redirect" title="Branch prediction">branch prediction</a> algorithm is performing...</p></blockquote><div class="templatequotecite"><p style="display: inline; padding-left: 2.3em;">— ATOM, <a href="Conference_on_Programming_Language_Design_and_Implementation" class="mw-redirect" title="Conference on Programming Language Design and Implementation">PLDI</a></p></div>
<p>The output of a profiler may be:
</p>
<ul><li>A statistical <i>summary</i> of the events observed (a <b>profile</b>)</li></ul>
<dl><dd>Summary profile information is often shown annotated against the source code statements where the events occur, so the size of measurement data is linear to the code size of the program.</dd></dl>
<pre>/* ------------ source------------------------- count */
0001 IF X = "A" 0055
0002 THEN DO
0003 ADD 1 to XCOUNT 0032
0004 ELSE
0005 IF X = "B" 0055
</pre>
<ul><li>A stream of recorded events (a <b>trace</b>)</li></ul>
<dl><dd>For sequential programs, a summary profile is usually sufficient, but performance problems in parallel programs (waiting for messages or synchronization issues) often depend on the time relationship of events, thus requiring a full trace to get an understanding of what is happening.</dd>
<dd>The size of a (full) trace is linear to the program's <a href="Instruction_path_length" title="Instruction path length">instruction path length</a>, making it somewhat impractical. A trace may therefore be initiated at one point in a program and terminated at another point to limit the output.</dd></dl>
<ul><li>An ongoing interaction with the <a href="Hypervisor" title="Hypervisor">hypervisor</a> (continuous or periodic monitoring via on-screen display for instance)</li></ul>
<dl><dd>This provides the opportunity to switch a trace on or off at any desired point during execution in addition to viewing on-going metrics about the (still executing) program. It also provides the opportunity to suspend asynchronous processes at critical points to examine interactions with other parallel processes in more detail.</dd></dl>
<p>A profiler can be applied to an individual method or at the scale of a module or program, to identify performance bottlenecks by making long-running code obvious.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> A profiler can be used to understand code from a timing point of view, with the objective of optimizing it to handle various runtime conditions<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> or various loads.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> Profiling results can be ingested by a compiler that provides <a href="Profile-guided_optimization" title="Profile-guided optimization">profile-guided optimization</a>.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Profiling results can be used to guide the design and optimization of an individual algorithm; the <a href="Krauss_matching_wildcards_algorithm" class="mw-redirect" title="Krauss matching wildcards algorithm">Krauss matching wildcards algorithm</a> is an example.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> Profilers are built into some <a href="Application_performance_management" title="Application performance management">application performance management</a> systems that aggregate profiling data to provide insight into <a href="Transaction_processing" title="Transaction processing">transaction</a> workloads in <a href="Distributed_computing" title="Distributed computing">distributed</a> applications.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<p>Performance-analysis tools existed on <a href="IBM/360" class="mw-redirect" title="IBM/360">IBM/360</a> and <a href="IBM/370" class="mw-redirect" title="IBM/370">IBM/370</a> platforms from the early 1970s, usually based on timer interrupts which recorded the <a href="Program_status_word" title="Program status word">program status word</a> (PSW) at set timer-intervals to detect "hot spots" in executing code. This was an early example of <a href="Sampling_(statistics)" title="Sampling (statistics)">sampling</a> (see below). In early 1974 <a href="Instruction_Set_Simulator" class="mw-redirect" title="Instruction Set Simulator">instruction-set simulators</a> permitted full trace and other performance-monitoring features.
</p><p>Profiler-driven program analysis on Unix dates back to 1973,<sup id="cite_ref-prof_7-0" class="reference"><a href="#cite_note-prof-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> when Unix systems included a basic tool, <code>prof</code>, which listed each function and how much of program execution time it used. In 1982 <code>gprof</code> extended the concept to a complete <a href="Call_graph" title="Call graph">call graph</a> analysis.<sup id="cite_ref-gprof_8-0" class="reference"><a href="#cite_note-gprof-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
</p><p>In 1994, Amitabh Srivastava and <a href="Alan_Eustace" title="Alan Eustace">Alan Eustace</a> of <a href="Digital_Equipment_Corporation" title="Digital Equipment Corporation">Digital Equipment Corporation</a> published a paper describing ATOM<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> (Analysis Tools with OM). The ATOM platform converts a program into its own profiler: at <a href="Compile_time" title="Compile time">compile time</a>, it inserts code into the program to be analyzed. That inserted code outputs analysis data. This technique - modifying a program to analyze itself - is known as "<a href="Instrumentation_(computer_programming)" title="Instrumentation (computer programming)">instrumentation</a>".
</p><p>In 2004 both the <code>gprof</code> and ATOM papers appeared on the list of the 50 most influential <a href="Conference_on_Programming_Language_Design_and_Implementation" class="mw-redirect" title="Conference on Programming Language Design and Implementation">PLDI</a> papers for the 20-year period ending in 1999.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Profiler_types_based_on_output">Profiler types based on output</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Flat_profiler">Flat profiler</h3></div>
<p>Flat profilers compute the average call times, from the calls, and do not break down the call times based on the callee or the context.
</p>
<div class="mw-heading mw-heading3"><h3 id="Call-graph_profiler">Call-graph profiler</h3></div>
<p><a href="Call_graph" title="Call graph">Call graph</a> profilers<sup id="cite_ref-gprof_8-1" class="reference"><a href="#cite_note-gprof-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> show the call times, and frequencies of the functions, and also the call-chains involved based on the callee. In some tools full context is not preserved.
</p>
<div class="mw-heading mw-heading3"><h3 id="Input-sensitive_profiler">Input-sensitive profiler</h3></div>
<p>Input-sensitive profilers<sup id="cite_ref-aprof_11-0" class="reference"><a href="#cite_note-aprof-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> add a further dimension to flat or call-graph profilers by relating performance measures to features of the input workloads, such as input size or input values. They generate charts that characterize how an application's performance scales as a function of its input.
</p>
<div class="mw-heading mw-heading2"><h2 id="Data_granularity_in_profiler_types">Data granularity in profiler types</h2></div>
<p>Profilers, which are also programs themselves, analyze target programs by collecting information on the target program's execution. Based on their data granularity, which depends upon how profilers collect information, they are classified as <i>event-based</i> or <i>statistical</i> profilers. Profilers interrupt program execution to collect information. Those interrupts can limit time measurement resolution, which implies that timing results should be taken with a grain of salt. <a href="Basic_block" title="Basic block">Basic block</a> profilers report a number of machine <a href="Cycles_per_instruction" title="Cycles per instruction">clock cycles</a> devoted to executing each line of code, or timing based on adding those together; the timings reported per basic block may not reflect a difference between <a href="CPU_cache" title="CPU cache">cache</a> hits and misses.<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Event-based_profilers">Event-based profilers</h3></div>
<p>Event-based profilers are available for the following programming languages:
</p>
<ul><li><a href="Java_(programming_language)" title="Java (programming language)">Java</a>: the <a href="Java_Virtual_Machine_Tools_Interface" title="Java Virtual Machine Tools Interface">JVMTI</a> (JVM Tools Interface) API, formerly JVMPI (JVM Profiling Interface), provides hooks to profilers, for trapping events like calls, class-load, unload, thread enter leave.</li>
<li><a href=".NET_Framework" title=".NET Framework">.NET</a>: Can attach a profiling agent as a <i>COM</i> server to the <i>CLR</i> using Profiling <i>API</i>. Like Java, the runtime then provides various callbacks into the agent, for trapping events like method <a href="Interpreter" class="mw-redirect" title="Interpreter">JIT</a> / enter / leave, object creation, etc. Particularly powerful in that the profiling agent can rewrite the target application's bytecode in arbitrary ways.</li>
<li><a href="Python_(programming_language)" title="Python (programming language)">Python</a>: Python profiling includes the profile module, hotshot (which is call-graph based), and using the 'sys.setprofile' function to trap events like c_{call,return,exception}, python_{call,return,exception}.</li>
<li><a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a>: Ruby also uses a similar interface to Python for profiling. Flat-profiler in profile.rb, module, and ruby-prof a C-extension are present.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Statistical_profilers">Statistical profilers</h3></div>
<p>These profilers operate by <a href="Sampling_(statistics)" title="Sampling (statistics)">sampling</a>. A sampling profiler probes the target program's <a href="Call_stack" title="Call stack">call stack</a> at regular intervals using <a href="Operating_system" title="Operating system">operating system</a> <a href="Interrupt" title="Interrupt">interrupts</a>. Sampling profiles are typically less numerically accurate and specific, providing only a statistical approximation, but allow the target program to run at near full speed. "The actual amount of error is usually more than one sampling period. In fact, if a value is n times the sampling period, the expected error in it is the square-root of n sampling periods."<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup>
</p><p>In practice, sampling profilers can often provide a more accurate picture of the target program's execution than other approaches, as they are not as intrusive to the target program and thus don't have as many side effects (such as on memory caches or instruction decoding pipelines). Also since they don't affect the execution speed as much, they can detect issues that would otherwise be hidden. They are also relatively immune to over-evaluating the cost of small, frequently called routines or 'tight' loops. They can show the relative amount of time spent in user mode versus interruptible kernel mode such as <a href="System_call" title="System call">system call</a> processing.
</p><p>Unfortunately, running kernel code to handle the interrupts incurs a minor loss of CPU cycles from the target program, diverts cache usage, and cannot distinguish the various tasks occurring in uninterruptible kernel code (microsecond-range activity) from user code. Dedicated hardware can do better: ARM Cortex-M3 and some recent MIPS processors' JTAG interfaces have a PCSAMPLE register, which samples the <a href="Program_counter" title="Program counter">program counter</a> in a truly undetectable manner, allowing non-intrusive collection of a flat profile.
</p><p>Some commonly used<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> statistical profilers for Java/managed code are <a href="SmartBear_Software" title="SmartBear Software">SmartBear Software</a>'s <a href="AQtime" title="AQtime">AQtime</a><sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> and <a href="Microsoft" title="Microsoft">Microsoft</a>'s <a href="CLR_Profiler" title="CLR Profiler">CLR Profiler</a>.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup> Those profilers also support native code profiling, along with <a href="Apple_Inc." title="Apple Inc.">Apple Inc.</a>'s <a href="Apple_Developer_Tools#Shark" title="Apple Developer Tools">Shark</a> (OSX),<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> <a href="OProfile" title="OProfile">OProfile</a> (Linux),<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup> <a href="Intel" title="Intel">Intel</a> <a href="VTune" title="VTune">VTune</a> and Parallel Amplifier (part of <a href="Intel_Parallel_Studio" title="Intel Parallel Studio">Intel Parallel Studio</a>), and <a href="Oracle_Corporation" title="Oracle Corporation">Oracle</a> <a href="Performance_Analyzer" title="Performance Analyzer">Performance Analyzer</a>,<sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup> among others.
</p>
<div class="mw-heading mw-heading3"><h3 id="Instrumentation">Instrumentation</h3></div>
<p>This technique effectively adds instructions to the target program to collect the required information. Note that <a href="Instrumenting" class="mw-redirect" title="Instrumenting">instrumenting</a> a program can cause performance changes, and may in some cases lead to inaccurate results and/or <a href="Heisenbug" title="Heisenbug">heisenbugs</a>. The effect will depend on what information is being collected, on the level of timing details reported, and on whether basic block profiling is used in conjunction with instrumentation.<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> For example, adding code to count every procedure/routine call will probably have less effect than counting how many times each statement is obeyed. A few computers have special hardware to collect information; in this case the impact on the program is minimal.
</p><p>Instrumentation is key to determining the level of control and amount of time resolution available to the profilers.
</p>
<ul><li><b>Manual</b>: Performed by the programmer, e.g. by adding instructions to explicitly calculate runtimes, simply count events or calls to measurement <a href="API" title="API">APIs</a> such as the <a href="Application_Response_Measurement" title="Application Response Measurement">Application Response Measurement</a> standard.</li>
<li><b>Automatic source level</b>: instrumentation added to the source code by an automatic tool according to an instrumentation policy.</li>
<li><b>Intermediate language</b>: instrumentation added to <a href="Assembly_language" title="Assembly language">assembly</a> or decompiled <a href="Bytecode" title="Bytecode">bytecodes</a> giving support for multiple higher-level source languages and avoiding (non-symbolic) binary offset re-writing issues.</li>
<li><b>Compiler assisted</b></li>
<li><b>Binary translation</b>: The tool adds instrumentation to a compiled <a href="Executable" title="Executable">executable</a>.</li>
<li><b>Runtime instrumentation</b>: Directly before execution the code is instrumented. The program run is fully supervised and controlled by the tool.</li>
<li><b>Runtime injection</b>: More lightweight than runtime instrumentation. Code is modified at runtime to have jumps to helper functions.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Interpreter_instrumentation">Interpreter instrumentation</h3></div>
<ul><li><b>Interpreter debug</b> options can enable the collection of performance metrics as the interpreter encounters each target statement. A <a href="Bytecode" title="Bytecode">bytecode</a>, <a href="Control_table" title="Control table">control table</a> or <a href="Just-in-time_compilation" title="Just-in-time compilation">JIT</a> interpreters are three examples that usually have complete control over execution of the target code, thus enabling extremely comprehensive data collection opportunities.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Hypervisor/simulator">Hypervisor/simulator</h3></div>
<ul><li><b>Hypervisor</b>: Data are collected by running the (usually) unmodified program under a <a href="Hypervisor" title="Hypervisor">hypervisor</a>. Example: <a href="SIMMON" title="SIMMON">SIMMON</a></li>
<li><b>Simulator</b> and <b>Hypervisor</b>: Data collected interactively and selectively by running the unmodified program under an <a href="Instruction_set_simulator" title="Instruction set simulator">instruction set simulator</a>.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1184024115">
/* start https://en.wikipedia.org/ */
.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}
/* end https://en.wikipedia.org/ */
</style><div class="div-col div-col-small" style="column-width: 20em;">
<ul><li><a href="Algorithmic_efficiency" title="Algorithmic efficiency">Algorithmic efficiency</a></li>
<li><a href="Benchmark_(computing)" title="Benchmark (computing)">Benchmark</a> – Standardized performance evaluation</li>
<li><a href="Java_performance" title="Java performance">Java performance</a> – Aspect of Java programming language</li>
<li><a href="List_of_performance_analysis_tools" title="List of performance analysis tools">List of performance analysis tools</a></li>
<li><a href="Performance_Application_Programming_Interface" title="Performance Application Programming Interface">PAPI</a> – Software library for microprocessor metrics</li>
<li><a href="Performance_engineering" title="Performance engineering">Performance engineering</a> – Encompasses the techniques applied during a systems development life cycle</li>
<li><a href="Performance_prediction" title="Performance prediction">Performance prediction</a></li>
<li><a href="Performance_tuning" title="Performance tuning">Performance tuning</a></li>
<li><a href="Runtime_verification" title="Runtime verification">Runtime verification</a></li>
<li><a href="Profile-guided_optimization" title="Profile-guided optimization">Profile-guided optimization</a> – Compiler optimization technique</li>
<li><a href="Static_code_analysis" class="mw-redirect" title="Static code analysis">Static code analysis</a> – Analysis of computer programs without executing them<span style="display:none" class="category-annotation-with-redirected-description">Pages displaying short descriptions of redirect targets</span></li>
<li><a href="Software_archaeology" title="Software archaeology">Software archaeology</a> – Study of legacy software implementations</li>
<li><a href="Worst-case_execution_time" title="Worst-case execution time">Worst-case execution time</a> – Maximum length of time a computed task could take to execute (WCET)</li></ul>
</div>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;">
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://stackoverflow.com/questions/13698674/how-to-find-the-performance-bottleneck-in-c-sharp-desktop-application">"How to find the performance bottleneck in C# desktop application?"</a>. <a href="Stack_Overflow" title="Stack Overflow">Stack Overflow</a>. 2012.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite id="CITEREFKrauss2017" class="citation web cs1">Krauss, Kirk J (2017). <a rel="nofollow" class="external text" href="http://www.developforperformance.com/PerformanceProfilingWithAFocus.html">"Performance Profiling with a Focus"</a>. Develop for Performance.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://stackify.com/what-is-code-profiling/">"What is code profiling? Learn the 3 Types of Code Profilers"</a>. <i>Stackify Developer Tips, Tricks and Resources</i>. Disqus. 2016.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite id="CITEREFLawrence2016" class="citation web cs1">Lawrence, Eric (2016). <a rel="nofollow" class="external text" href="https://textslashplain.com/2016/01/10/getting-started-with-profile-guided-optimization/">"Getting Started with Profile Guided Optimization"</a>. <i>testslashplain</i>. WordPress.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite id="CITEREFKrauss2018" class="citation web cs1">Krauss, Kirk (2018). <a rel="nofollow" class="external text" href="http://www.developforperformance.com/MatchingWildcards_AnImprovedAlgorithmForBigData.html">"Matching Wildcards: An Improved Algorithm for Big Data"</a>. Develop for Performance.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://stackify.com/three-types-of-net-profilers/">"List of .Net Profilers: 3 Different Types and Why You Need All of Them"</a>. <i>Stackify Developer Tips, Tricks and Resources</i>. Disqus. 2016.</cite></span>
</li>
<li id="cite_note-prof-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-prof_7-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.tuhs.org/Archive/Distributions/Research/Dennis_v4/v4man.tar.gz">Unix Programmer's Manual, 4th Edition</a></span>
</li>
<li id="cite_note-gprof-8"><span class="mw-cite-backlink">^ <a href="#cite_ref-gprof_8-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-gprof_8-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text">
S.L. Graham, P.B. Kessler, and M.K. McKusick, <a rel="nofollow" class="external text" href="http://docs.freebsd.org/44doc/psd/18.gprof/paper.pdf"><i>gprof: a Call Graph Execution Profiler</i></a>, Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, <i><a href="SIGPLAN" title="SIGPLAN">SIGPLAN</a> Notices</i>, Vol. 17, No 6, pp. 120-126; <a href="https://doi.org/10.1145/800230.806987" class="extiw external" title="doi:10.1145/800230.806987">doi:10.1145/800230.806987</a></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text">
A. Srivastava and A. Eustace, <a rel="nofollow" class="external text" href="http://www.ece.cmu.edu/~ece548/tools/atom/man/wrl_94_2.pdf"><i>ATOM: A system for building customized program analysis tools</i></a>, Proceedings of the ACM SIGPLAN Conference on Programming language design and implementation (PLDI '94), pp. 196-205, 1994; ACM <i>SIGPLAN Notices</i> - Best of PLDI 1979-1999 Homepage archive, Vol. 39, No. 4, pp. 528-539; <a href="https://doi.org/10.1145/989393.989446" class="extiw external" title="doi:10.1145/989393.989446">doi:10.1145/989393.989446</a></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text">
<a rel="nofollow" class="external text" href="http://www.cs.utexas.edu/users/mckinley/20-years.html">20 Years of PLDI (1979–1999): A Selection</a>, <a href="Kathryn_S._McKinley" title="Kathryn S. McKinley">Kathryn S. McKinley</a>, Editor</span>
</li>
<li id="cite_note-aprof-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-aprof_11-0">^</a></b></span> <span class="reference-text">E. Coppa, C. Demetrescu, and I. Finocchi, <a rel="nofollow" class="external text" href="https://web.archive.org/web/20180611201601/https://ieeexplore.ieee.org/document/6858059/"><i>Input-Sensitive Profiling</i></a>, IEEE Trans. Software Eng. 40(12): 1185-1205 (2014); <a href="https://doi.org/10.1109/TSE.2014.2339825" class="extiw external" title="doi:10.1109/TSE.2014.2339825">doi:10.1109/TSE.2014.2339825</a></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text">D. Zaparanuks and M. Hauswirth, <i>Algorithmic Profiling</i>, Proceedings of the 33rd ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2012), ACM SIGPLAN Notices, Vol. 47, No. 6, pp. 67-76, 2012; <a href="https://doi.org/10.1145/2254064.2254074" class="extiw external" title="doi:10.1145/2254064.2254074">doi:10.1145/2254064.2254074</a></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text">T. Kustner, J. Weidendorfer, and T. Weinzierl, <i>Argument Controlled Profiling</i>, Proceedings of Euro-Par 2009 – Parallel Processing Workshops, Lecture Notes in Computer Science, Vol. 6043, pp. 177-184, 2010; <a href="https://doi.org/10.1007/978-3-642-14122-5_22" class="extiw external" title="doi:10.1007/978-3-642-14122-5 22">doi:10.1007/978-3-642-14122-5 22</a></span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://archive.cnx.org/contents/d29c016a-2960-4fc9-b431-9eda881a28f5@3/timing-and-profiling-basic-block-profilers#id6897344">"Timing and Profiling - Basic Block Profilers"</a>. <i>OpenStax CNX Archive</i>.</cite></span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><cite id="CITEREFBallLarus1994" class="citation journal cs1">Ball, Thomas; Larus, James R. (1994). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20180518195918/https://www.classes.cs.uchicago.edu/current/32001-1/papers/ball-larus-profiling.pdf">"Optimally profiling and tracing programs"</a> <span class="cs1-format">(PDF)</span>. <i>ACM Transactions on Programming Languages and Systems</i>. <b>16</b> (4). ACM Digital Library: <span class="nowrap">1319–</span>1360. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F183432.183527">10.1145/183432.183527</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:6897138">6897138</a>. Archived from <a rel="nofollow" class="external text" href="https://www.classes.cs.uchicago.edu/current/32001-1/papers/ball-larus-profiling.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2018-05-18<span class="reference-accessdate">. Retrieved <span class="nowrap">2018-05-18</span></span>.</cite></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.cs.utah.edu/dept/old/texinfo/as/gprof.html#SEC12">Statistical Inaccuracy of <code>gprof</code> Output</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120529075000/http://www.cs.utah.edu/dept/old/texinfo/as/gprof.html">Archived</a> 2012-05-29 at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.ginktage.com/2014/10/popular-c-profilers/">"Popular C# Profilers"</a>. Gingtage. 2014.</cite></span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://support.smartbear.com/viewarticle/54581/">"Sampling Profiler - Overview"</a>. <i>AQTime 8 Reference</i>. SmartBear Software. 2018.</cite></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><cite id="CITEREFWenzal2017" class="citation web cs1">Wenzal, Maira; et al. (2017). <a rel="nofollow" class="external text" href="https://docs.microsoft.com/en-us/dotnet/framework/unmanaged-api/profiling/profiling-overview#supported-features">"Profiling Overview"</a>. <i>Microsoft .NET Framework Unmanaged API Reference</i>. Microsoft.</cite></span>
</li>
<li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://developer.apple.com/library/content/documentation/Performance/Conceptual/PerformanceOverview/PerformanceTools/PerformanceTools.html">"Performance Tools"</a>. <i><a href="Apple_Developer_Tools" title="Apple Developer Tools">Apple Developer Tools</a></i>. Apple, Inc. 2013.</cite></span>
</li>
<li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><cite id="CITEREFNettoArnold2012" class="citation web cs1">Netto, Zanella; Arnold, Ryan S. (2012). <a rel="nofollow" class="external text" href="https://www.ibm.com/developerworks/linux/library/l-evaluatelinuxonpower/">"Evaluate performance for Linux on Power"</a>. <i>IBM DeveloperWorks</i>.</cite></span>
</li>
<li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><cite id="CITEREFSchmidlTerbovenan_MeyMüller2013" class="citation conference cs1">Schmidl, Dirk; Terboven, Christian; an Mey, Dieter; Müller, Matthias S. (2013). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=-I64BAAAQBAJ&pg=PA27"><i>Suitability of Performance Tools for OpenMP Task-Parallel Programs</i></a>. Proc. 7th Int'l Workshop on Parallel Tools for High Performance Computing. pp. <span class="nowrap">25–</span>37. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9783319081441</bdi>.</cite></span>
</li>
<li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><cite id="CITEREFCarletonKirkegaardSehr1998" class="citation magazine cs1">Carleton, Gary; Kirkegaard, Knud; Sehr, David (1998). <a rel="nofollow" class="external text" href="http://www.drdobbs.com/profile-guided-optimizations/184410561">"Profile-Guided Optimizations"</a>. <i><a href="Dr._Dobb's_Journal" title="Dr. Dobb's Journal">Dr. Dobb's Journal</a></i>.</cite></span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li>Article "<a rel="nofollow" class="external text" href="http://www.ibm.com/developerworks/rational/library/05/1004_gupta/">Need for speed — Eliminating performance bottlenecks</a>" on doing execution time analysis of Java applications using IBM Rational Application Developer.</li>
<li><a rel="nofollow" class="external text" href="http://software.intel.com/sites/products/documentation/hpc/vtune/windows/jit_profiling.pdf">Profiling Runtime Generated and Interpreted Code using the VTune Performance Analyzer</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-04-19" href="https://en.wikipedia.org/wiki/?title=Profiling_(computer_programming)&oldid=1286436094">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>